import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;



public class DeleteDialog extends JDialog implements ActionListener{
	/**Pole wyboru wydarzenia do usunięcia*/
	private JComboBox eventSelector;
	/**Pole zawierające indeksy wydarzeń w źródłowym ArrayList*/
	private ArrayList<Integer> indexes;
	private JButton ok;
	private JButton cancel;
	private boolean isExecuted;
	/**
	 * Dodaje wydarzenie przeznaczone do usunięcia do wewnętrznej kolekcji.
	 * @param name	Nazwa wyświetlana wydarzenia.
	 * @param index Index w źrodłowej kolekcji.
	 */
	public void addEvent (String name, int index)
	{
		indexes.add(index);
		eventSelector.addItem(name);
	}
	/**
	 * Inicjalizuje niewidoczne okno dialogowe oraz dodaje wszystkie komponenty.
	 * @param owner Rodzic okna.
	 * @param title Tytuł okna.
	 */
	DeleteDialog (Frame owner, String title)
	{
		super(owner,title,true);
		setLayout(new BorderLayout());
		indexes = new ArrayList<Integer>();
		GridBagConstraints r = new GridBagConstraints();
        r.gridwidth = GridBagConstraints.REMAINDER;
        r.fill = GridBagConstraints.HORIZONTAL;
        r.weightx = 1.0;
		JPanel p = new JPanel(new GridBagLayout());
		p.add(new JLabel ("Wydarzenie do usunięcia:"),r);
		p.add(eventSelector = new JComboBox(),r);
		JPanel buttons = new JPanel();
	    buttons.setLayout(new FlowLayout());
	    buttons.add(ok = new JButton("Usuń"));
	    buttons.add(cancel = new JButton("Anuluj"));
		setLayout(new BorderLayout());
		add(p,BorderLayout.NORTH);
		add(buttons,BorderLayout.SOUTH);
		ok.addActionListener(this);
		cancel.addActionListener(this);
		ok.setMnemonic(KeyEvent.VK_U);
		cancel.setMnemonic(KeyEvent.VK_A);
        setSize(300, 100);
			
	}
	/**
	 * Zwraca indeks wydarzenia które ma zostać usunięte z kolekcji źródłowej.
	 * @return indeks kolekcji źródłowej.
	 */
	public int getIndexToRemove ()
	{
		return indexes.get(eventSelector.getSelectedIndex()).intValue();
		
	}
	/**
	 * Pokazuje okno usuwania wydarzeń.
	 * @return true jeżeli naciśnięto ok lub false jeżeli cancel.
	 */
	public boolean exec()
	{
		setVisible(true);
		return isExecuted;	
	}
	/**
	 * Nasłuchuje przyciski ok i cancel ustawia odpowiednie flagi oraz zamyka okno.
	 */
	public void actionPerformed(ActionEvent evt) 
		{
			if (evt.getSource()==ok)
			{
				isExecuted=true;
				setVisible(false);
			}
			if(evt.getSource()==cancel)
			{
				isExecuted=false;
				setVisible(false);
			}
		}



}
